# -*- coding: utf-8 -*-

"""剑指 Offer II 076. 数组中的第 k 大的数字
给定整数数组 nums 和整数 k，请返回数组中第 k 个最大的元素。
请注意，你需要找的是数组排序后的第 k 个最大的元素，而不是第 k 个不同的元素。

示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5

示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4

提示：
1 <= k <= nums.length <= 10^4
-10^4 <= nums[i] <= 10^4"""

import heapq

class Solution:
    """用一个容量为 k 的小顶堆"""
    def findKthLargest(self, nums, k: int) -> int:
        size = 0
        min_heap = []
        heapq.heapify(min_heap)
        for n in nums:
            if size < k:
                heapq.heappush(min_heap, n)
                size += 1
            else:
                heapq.heappushpop(min_heap, n)
        return min_heap[0]


if __name__ == '__main__':
    so = Solution()
    print(so.findKthLargest([3,2,1,5,6,4], 2))
    print(so.findKthLargest([3,2,3,1,2,4,5,5,6], 4))

